Skip to content

Postfix Mailserver mit Dovecot und Rspamd

Mailsystem-rspamd.png

Vorbereitungen

Alle Postfächer gehören virtuellen Benutzern. Um Postfächer zu verwalten, benötigen wir einen Systembenutzer, der Eigentümer aller Postfächer ist. Diesen Benutzer vmail erstellen wir wie folgt.

groupadd -g 5000 vmail
useradd -u 5000 -g vmail -s /usr/sbin/nologin -d /var/mail/vmail -m vmail

PostfixAdmin installieren

Da PostfixAdmin eine PHP-Anwendung ist, ist ein Webserver erforderlich. Wir werden Apache2 mit PHP8.2 und MariaDB verwenden. Die benötigten PHP Pakete installieren wir wie folgt.

apt install mariadb-server php-fpm php-cli php-imap php-json php-mysql php-opcache php-mbstring php-readline redis-server

Nun erstellen wir uns eine MySQL Datenbank postfixadmin und einen dazugehörigen Benutzer postfixadmin. Als Platzhalter your_secret_password muss natürlich das echte Passwort rein.

mysql -u root -p
CREATE DATABASE postfixadmin;
GRANT ALL ON postfixadmin.* TO 'postfixadmin'@'localhost' IDENTIFIED BY 'your_secret_password';
FLUSH PRIVILEGES;
EXIT;

Nun laden wir uns PostfixAdmin herunter und installieren es wie folgt.

cd /var/www/
wget https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-3.3.13.tar.gz
tar xzf postfixadmin-3.3.13.tar.gz && rm postfixadmin-3.3.13.tar.gz
mv postfixadmin-postfixadmin-3.3.13 postfixadmin-3.3.13
ln -s postfixadmin-3.3.13 postfixadmin
mkdir -p postfixadmin/templates_c

Dann erstellen wir uns unsere Konfiguration für PostfixAdmin. Dabei müssen wir your_secret_password wieder mit dem Passwort des Datenbank Benutzer ersetzen. Auch example.com ersetzen wir durch unsere Domain.

cat <<CONF >>postfixadmin/config.local.php
<?php
$CONF['configured'] = true;
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'your_secret_password';
$CONF['database_name'] = 'postfixadmin';
$CONF['default_aliases'] = array (
'abuse'      => 'abuse@example.com',
'hostmaster' => 'hostmaster@example.com',
'postmaster' => 'postmaster@example.com',
'webmaster'  => 'webmaster@example.com'
);
$CONF['fetchmail'] = 'NO';
$CONF['show_footer_text'] = 'NO';
$CONF['quota'] = 'YES';
$CONF['domain_quota'] = 'YES';
$CONF['quota_multiplier'] = '1024000';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';
$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '0';
$CONF['domain_quota_default'] = '0';
?>
CONF

Nun führen wir folgendes Skript aus um das Datenbankschema zu installieren.

php /var/www/postfixadmin/public/upgrade.php

Da die Datenbank nun fertig ist, ist es möglich, den ersten Superadmin admin über die CLI-Tools zu erstellen.

bash /var/www/postfixadmin/scripts/postfixadmin-cli admin add

Als Letzen Schritt erstellen wir uns einen VirtualHost wo wir als DocumentRoot /var/www/postfixadmin/public verwenden.

Postfix & Dovecot installieren

Als erstes installieren wir die benötigten Pakete.

apt install postfix postfix-mysql dovecot-imapd dovecot-lmtpd dovecot-pop3d dovecot-mysql redis-tools

Nun erstellen wir ein Verzeichnis /etc/postfix/sql wo wir die SQL Querys für Postfix speichern.

mkdir -p /etc/postfix/sql

Nun erstellen wir uns mysql_virtual_domains_maps.cf. Das Passwort your_secret_password muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.

cat << SQL >> /etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
SQL

Als nächstes erstellen wir uns mysql_virtual_alias_maps.cf. Das Passwort your_secret_password muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.

cat << SQL >> /etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
SQL

Als nächstes erstellen wir uns mysql_virtual_alias_domain_catchall_maps.cf. Das Passwort your_secret_password muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.

cat << SQL >> /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query  = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
SQL

Als nächstes erstellen wir uns mysql_virtual_alias_domain_maps.cf. Das Passwort your_secret_password muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.

cat << SQL >> /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
SQL

Als nächstes erstellen wir uns mysql_virtual_mailbox_maps.cf. Das Passwort your_secret_password muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.

cat << SQL >> /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
SQL

Als nächstes erstellen wir uns mysql_virtual_alias_domain_mailbox_maps.cf. Das Passwort your_secret_password muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.

cat << SQL >> /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
SQL

Sobald die MySQL-Konfigurationsdateien erstellt sind, aktualisieren Sie die Konfiguration von Postfix.

postconf -e "virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf"
postconf -e "virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf"
postconf -e "virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf"

Hinweis

Mit dem postconfBefehl können Sie die tatsächliche Konfiguration anzeigen, Konfigurationswerte ändern oder andere Konfigurationsinformationen zum Postfix-Mailsystem anzeigen.

Die Lieferung vor Ort erfolgt durch Dovecot. Es nimmt E-Mails von einem MTA (Postfix) entgegen und stellt sie an das Postfach eines lokalen Benutzers zu.

postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"

Die TLS-Parameter konfigurieren wir mithilfe des Let's encrypt SSL-Zertifikats. Der Pfad zu den Zertifikaten muss ggf. angepasst werden.

postconf -e 'smtp_tls_security_level = may'
postconf -e 'smtpd_tls_security_level = may'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_cert_file = /etc/apache2/custom.d/certs.d/tuxnet24.de/fullchain.pem'
postconf -e 'smtpd_tls_key_file = /etc/apache2/custom.d/certs.d/tuxnet24.de/privkey.pem'

Nun konfigurieren wir die SMTP-Einstellungen zum authentifizierten.

postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'

Nun aktivieren wir die TLS/SSL- und Submission Ports in der Postfix-Konfigurationsdatei. Dazu öffnen wir die Datei /etc/postfix/master.cf mit einem Texteditor und kommentieren die Abschnitte submission und smtps wie folgt aus. Wir müssen dabei sicherstellen, dass vor dem -o ein erforderliches Leerzeichen steht.

submission inet n       -       y       -       -       smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       y       -       -       smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING

Nun starten wir den Postfix neu, damit die Änderungen wirksam werden.

systemctl restart postfix

Nun bearbeiten wir die Datei /etc/dovecot/conf.d/10-mail.conf und tragen folgende erforderliche Informationen ein.

...
mail_location = maildir:/var/mail/vmail/%d/%n
...
mail_uid = vmail
mail_gid = vmail
...
first_valid_uid = 5000
last_valid_uid = 5000
...
mail_privileged_group = mail
...
mail_plugins = quota
...

Dann ändern wir die Informationen in der Datei /etc/dovecot/conf.d/10-auth.confwie folgt.

...
disable_plaintext_auth = yes
...
auth_mechanisms = plain login
...
#!include auth-system.conf.ext
!include auth-sql.conf.ext
...

Dann bearbeiten wir die Datei /etc/dovecot/conf.d/10-master.confwie folgt.

...
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
}
...
}
...
service auth {
...
unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
}
...
unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
}
...
}
...
service auth-worker {
user = vmail
}
...
service dict {
unix_listener dict {
    mode = 0660
    user = vmail
    group = vmail
}
}
...

Dann bearbeiten wir die Datei /etc/dovecot/conf.d/10-ssl.confwie folgt. Wichtig! Der Pfad muss zu den Zertifikaten muss angepasst werden.

...
ssl = yes
...
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
ssl_dh = </etc/ssl/certs/dhparam.pem
...
ssl_cipher_list = EECDH+AES:EDH+AES+aRSA
...
ssl_prefer_server_ciphers = yes
...

Dann fügen wir in der Datei die folgende Zeile hinzu/etc/dovecot/conf.d/20-imap.conf

...
protocol imap {
postmaster_address = postmaster@example.com
mail_plugins = $mail_plugins
}
...

Dann fügen wir in der Datei einen Spam-Ordner hinzu /etc/dovecot/conf.d/15-mailboxes.conf

...
mailbox Drafts {
special_use = \Drafts
}
mailbox Spam {
special_use = \Junk
auto = subscribe
}
mailbox Junk {
special_use = \Junk
}
...

Nun konfigurieren wir Dovecot so, dass es eine Verbindung zur MySQL-Datenbank herstellt, um die Kontingente entweder pro Domäne oder pro Benutzer zu verwalten. Es wird eine Benachrichtigung per E-Mail gesendet, sobald das Postfach eines Benutzers einen bestimmten Sättigungsgrad erreicht hat. Daher bearbeiten wir die Datei /etc/dovecot/conf.d/90-quota.conf wie folgt.

quota = dict:User quota::proxy::sqlquota
quota_rule = *:storage=5GB
quota_rule2 = Trash:storage=+100M
quota_grace = 10%%
quota_exceeded_message = Quota exceeded, please contact your system administrator.
quota_warning = storage=100%% quota-warning 100 %u
quota_warning2 = storage=95%% quota-warning 95 %u
quota_warning3 = storage=90%% quota-warning 90 %u
quota_warning4 = storage=85%% quota-warning 85 %u
}

service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
user = vmail

unix_listener quota-warning {
group = vmail
mode = 0660
user = vmail
}
}

dict {
sqlquota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext

Zuerst müssen wir sicherstellen, dass Ihre MySQL-Anmeldeinformationen korrekt sind, um dann die Datei /etc/dovecot/dovecot-dict-sql.conf.ext wie folgt zu bearbeiten.

...
connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=your_secret_password
...
map {
pattern = priv/quota/storage
table = quota2
username_field = username
value_field = bytes
}
map {
pattern = priv/quota/messages
table = quota2
username_field = username
value_field = messages
}
...
# map {
#   pattern = shared/expire/$user/$mailbox
#   table = expires
#   value_field = expire_stamp
#
#   fields {
#     username = $user
#     mailbox = $mailbox
#   }
# }
...

Danach erstellen wir das folgende Skript, welches eine Warnung an einen Benutzer sendet, der die Kapazitätsgrenzen seines Postfachs erreicht hat. Wir bearbeiten die Datei /usr/local/bin/quota-warning.sh wie folgt.

#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=dict:User quota::noenforcing:proxy::sqlquota"
From: postmaster@example.com
Subject: Quota warning

Your mailbox is $PERCENT% full. Do not forget to make a backup of old messages to remain able to receive mails.
EOF

Dann setzen wir noch das Ausführung Bit.

chmod +x /usr/local/bin/quota-warning.sh

Und starten Sie Dovecot neu.

systemctl restart dovecot

Rspamd installieren

Zuerst fügen wir das Repository von Rspamd mit dem folgenden Befehl zu Ihren apt-Quellen hinzu.

wget -O- https://rspamd.com/apt-stable/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/rspamd.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/rspamd.gpg] http://rspamd.com/apt-stable/ $(lsb_release -cs) main" | tee -a /etc/apt/sources.list.d/rspamd.list

Dann aktualisieren wir den Apt-Cache und installieren rspamd wie folgt.

apt update && apt install rspamd

Die Datei /etc/rspamd/local.d/worker-normal.incenthält Informationen über den Port, auf dem Rspamd lauscht. Der Standardport ist 11333. Wir binden ihn an unseren lokalen Host, indem wir der Datei die folgende Zeile hinzufügen.

bind_socket = "127.0.0.1:11333";

Nun konfigurieren wir einen Proxy zwischen Postfix und Rspamd, der Port 11332 überwacht und als Milter für die Kommunikation zwischen den beiden Tools fungiert. Wie bearbeiten die Datei/etc/rspamd/local.d/worker-proxy.inc wie folgt.

bind_socket = "127.0.0.1:11332";

Nun legen wir ein Passwort für den Worker fest. Um ein verschlüsseltes Passwort zu generieren, führen wir den folgenden Befehl aus.

rspamadm pw --encrypt -p your_secret_password
$2$93qin9nkifzjpr7taqhs9guua888tnny$dnys6um6xm1gb1amgnz9hocuz7grxuk5z9yjw87psrk6yu641oiy

Dann bearbeiten wir die Datei /etc/rspamd/local.d/worker-controller.incund geben das verschlüsselte Passwort ein.

password = "$2$93qin9nkifzjpr7taqhs9guua888tnny$dnys6um6xm1gb1amgnz9hocuz7grxuk5z9yjw87psrk6yu641oiy";

Nun konfigurieren wir Redis für die Verwendung mit rspamd, indem wir die Datei /etc/rspamd/local.d/classifier-bayes.conf bearbeiten,

servers = "127.0.0.1";
backend = "redis";

Dann setzen wir die milter headers in der Datei /etc/rspamd/local.d/milter_headers.conf wie folgt.

use = ["x-spamd-bar", "x-spam-level", "authentication-results"];

Nun können wir den rspamd Daemon neu starten.

systemctl restart rspamd

Nun erstellen wir uns einen VirtualHost Datei wie z.B. /etc/apache2/sites-available/rspamd.example.com.conf. Dieser Schnipzel zeigt nur die Proxy Konfiguration des Apache Webservers. Zu beachten ist, dass <rspamd.example.com> mit den korrekten Namen ausgetauscht wird.

    <IfModule mod_proxy.c>
        ProxyRequests Off
        ProxyPreserveHost On
        #RequestHeader unset Accept-Encoding
        #RequestHeader set X-Forwarded-Proto "https"
        #RequestHeader set X-Forwarded-Port "443"
        <Proxy *>
            Require all granted
        </Proxy>
        ProxyPass / http://localhost:11334/
        ProxyPassReverse / http://localhost:11334/
        ProxyPassReverseCookieDomain 127.0.0.1 <rspamd.example.com>
    </IfModule>

Wir aktivieren nun die neue VirtualHost Datei und starten den Apache Webserver neu.

a2ensite rspamd.example.com.conf && systemctl restart apache2

Um Rspamd mit Postfix zu verwenden, muss die Konfiguration mit postconf wie folgt aktualisiert werden.

postconf -e "milter_protocol = 6"
postconf -e "milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}"
postconf -e "milter_default_action = accept"
postconf -e "smtpd_milters = inet:127.0.0.1:11332"
postconf -e "non_smtpd_milters = inet:127.0.0.1:11332"

Dann starten wir postfix neu, damit die Änderungen wirksam werden.

systemctl restart postfix

Sieve Filter für Dovecot installieren und einrichten

Dovecot ist bereits auf dem Server installiert, nun fügen wir das Sieve- Filtermodul hinzu und integrieren es in Rspamd.

apt install dovecot-sieve dovecot-managesieved

Danach öffnen wir die Datei /etc/dovecot/conf.d/20-lmtp.conf und bearbeiten diese wie folgt.

...
protocol lmtp {
postmaster_address = postmaster@example.com
mail_plugins = $mail_plugins sieve
}
...

Dann öffnen wir die Datei /etc/dovecot/conf.d/20-imap.conf und bearbeiten diese wie folgt.

...
protocol imap {
...
mail_plugins = $mail_plugins imap_quota imap_sieve
...
}
...

Nun bearbeiten wir die Datei /etc/dovecot/conf.d/20-managesieve.conf wie folgt.

...
service managesieve-login {
inet_listener sieve {
    port = 4190
}
}
...
service managesieve {
process_limit = 1024
}
...

Nun öffnen und bearbeiten wir die Datei /etc/dovecot/conf.d/90-sieve.conf wie folgt.

plugin {
    ...
    # sieve = file:~/sieve;active=~/.dovecot.sieve
    sieve_plugins = sieve_imapsieve sieve_extprograms
    sieve_before = /var/vmail/mail/sieve/global/spam-global.sieve
    sieve = file:/var/vmail/mail/sieve/%d/%n/scripts;active=/var/vmail/mail/sieve/%d/%n/active-script.sieve

    imapsieve_mailbox1_name = Spam
    imapsieve_mailbox1_causes = COPY
    imapsieve_mailbox1_before = file:/var/vmail/mail/sieve/global/report-spam.sieve

    imapsieve_mailbox2_name = *
    imapsieve_mailbox2_from = Spam
    imapsieve_mailbox2_causes = COPY
    imapsieve_mailbox2_before = file:/var/vmail/mail/sieve/global/report-ham.sieve

    sieve_pipe_bin_dir = /usr/bin
    sieve_global_extensions = +vnd.dovecot.pipe
    ....
}

Danach starten wir den Dovecot- Service neu und erstellen ein Verzeichnis für die Sieve-Skripte.

systemctl restart dovecot
mkdir -p /var/vmail/mail/sieve/global

Nun erstellen wir einen globalen Sieve- Filter in der Datei /var/vmail/mail/sieve/global/spam-global.sieve. Damit werden als Spam markierte E-Mails direkt in den Spam-Ordner verschoben.

require ["fileinto","mailbox"];

if anyof(
    header :contains ["X-Spam-Flag"] "YES",
    header :contains ["X-Spam"] "Yes",
    header :contains ["Subject"] "*** SPAM ***"
    )
{
    fileinto :create "Spam";
    stop;
}

Dann erstellen wir ein Skript mit dem Namen /var/vmail/mail/sieve/global/report-spam.sieve, das jedes Mal ausgelöst wird, wenn eine E-Mail manuell in den Spam-Ordner verschoben wird.

require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_spam"];

Dann erstellen wir ein Skript mit dem Namen /var/vmail/mail/sieve/global/report-ham.sieve, das jedes Mal ausgelöst wird, wenn eine E-Mail aus dem Spamordner verschoben wird.

require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_ham"];

Nun kompilieren wir noch die Sieve-Skripte und setzen die Berechtigungen.

sievec /var/vmail/mail/sieve/global/spam-global.sieve
sievec /var/vmail/mail/sieve/global/report-spam.sieve
sievec /var/vmail/mail/sieve/global/report-ham.sieve
chown -R vmail: /var/vmail/mail/sieve/

DKIM-Schlüssel erstellen

DomainKeys Identified Mail (DKIM) ist eine E-Mail-Authentifizierungsmethode, die dazu dient, E-Mail-Spoofing zu erkennen. Sie ermöglicht es dem empfangenden Server, die Herkunft einer E-Mail zu überprüfen, indem er sie mit einer digitalen Signatur versieht. Die Überprüfung der Signatur erfolgt anhand des im DNS veröffentlichten öffentlichen Schlüssels des Unterzeichners. Damit lassen sich betrügerische E-Mails erkennen.

1. Version mit einem DKIM Schlüssel für alle Domains

Wir legen ein neues Verzeichnis zum Speichern des DKIM-Schlüssels an und erzeugen ein neues DKIM-Schlüsselpaar mit dem Dienstprogramm rspamadm. Im folgenden Beispiel verwenden wir dkim als DKIM-Selektor. Es wird ein Schlüsselpaar erzeugt, das für alle vom Mailserver verwalteten Domänen verwendet werden kann.

mkdir /var/lib/rspamd/dkim/
rspamadm dkim_keygen -b 2048 -s dkim -k /var/lib/rspamd/dkim/dkim.key > /var/lib/rspamd/dkim/dkim.pub

In diesem Verzeichnis finden Sie zwei Dateien:

  • dkim.key - Die Datei des privaten Schlüssels
  • dkim.pub - Die Datei mit dem öffentlichen Schlüssel

Wir erstellen nun eine neue Datei /etc/rspamd/local.d/dkim_signing.conf, um Rspamd mitzuteilen, wo es nach dem DKIM-Schlüssel und dem Selektornamen suchen soll. Die letzte Zeile aktiviert die DKIM-Signierung für Alias-Absenderadressen.

selector = "mail";
path = "/var/lib/rspamd/dkim/$selector.key";
allow_username_mismatch = true;

2. Version mit einem DKIM Schlüssel für jede einzelne Domains

Möchen wir für jede Email Domain einen eigenen DKIM Schlüssel, müssen wir auch mehrer erstellen. In diesem Beispiel erstellen wir für die Domains tuxnet24.de, tuxnet24.net und tuxnet24.org einen DKIM Schlüssel wie folgt.

rspamadm dkim_keygen -b 2048 -s dkim -k /var/lib/rspamd/dkim/dkim.tanczo.de.key > /var/lib/rspamd/dkim/dkim.tanczo.de.pub
rspamadm dkim_keygen -b 2048 -s dkim -k /var/lib/rspamd/dkim/dkim.tanczo.net.key > /var/lib/rspamd/dkim/dkim.tanczo.net.pub
rspamadm dkim_keygen -b 2048 -s dkim -k /var/lib/rspamd/dkim/dkim.tanczo.org.key > /var/lib/rspamd/dkim/dkim.tanczo.org.pub

Wir erstellen nun eine neue Datei /etc/rspamd/local.d/dkim_signing.conf, um Rspamd mitzuteilen, wo es nach dem DKIM-Schlüssel und dem Selektornamen suchen soll.

try_fallback = false;
allow_username_mismatch = true;
domain {
    # Domain name tuxnet24.de is used as key
    tuxnet24.de {
        # Private key path
        path = "/var/lib/rspamd/dkim/dkim.tuxnet24.de.key";
        # Selector name
        selector = "dkim";
    }
    # Domain name tuxnet24.net is used as key
    tuxnet24.net {
        # Private key path
        path = "/var/lib/rspamd/dkim/dkim.tuxnet24.net.key";
        # Selector name
        selector = "dkim";
    }
    # Domain name tuxnet24.org is used as key
    tuxnet24.org {
        # Private key path
        path = "/var/lib/rspamd/dkim/dkim.tuxnet24.org.key";
        # Selector name
        selector = "dkim";
    }
}

Hinweis

Ab hier gilt die Konfiguration wieder für beide Versionen!

Rspamd unterstützt auch ARC-Signaturen. Wir verwenden die gleiche Konfigurationsdatei und kopieren diese.

cp  /etc/rspamd/local.d/dkim_signing.conf /etc/rspamd/local.d/arc.conf

Nun starten wir den Rspamd neu.

systemctl restart rspamd

Testen

Dokumentation